package com.hck.domain.user.model.valobj;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * 注册请求值对象
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RegisterRequest {
    
    /**
     * 用户名
     */
    private String username;
    
    /**
     * 密码
     */
    private String password;
    
    /**
     * 确认密码
     */
    private String confirmPassword;
    
    /**
     * 真实姓名
     */
    private String realName;
    
    /**
     * 身份证号
     */
    private String idCard;
    
    /**
     * 手机号
     */
    private String phone;
    
    /**
     * 邮箱
     */
    private String email;
    
    /**
     * 性别：0-女，1-男
     */
    private Integer gender;
    
    /**
     * 出生日期
     */
    private Date birthDate;
    
    /**
     * 住址
     */
    private String address;
    
    /**
     * 紧急联系人
     */
    private String emergencyContact;
    
    /**
     * 紧急联系电话
     */
    private String emergencyPhone;
    
    /**
     * 注册IP
     */
    private String registerIp;
    
    /**
     * 验证注册参数
     */
    public boolean isValid() {
        // 基本参数验证
        if (username == null || username.trim().isEmpty()) {
            return false;
        }
        if (password == null || password.trim().isEmpty()) {
            return false;
        }
        if (confirmPassword == null || confirmPassword.trim().isEmpty()) {
            return false;
        }
        if (realName == null || realName.trim().isEmpty()) {
            return false;
        }
        if (phone == null || phone.trim().isEmpty()) {
            return false;
        }
        
        // 密码确认验证
        if (!password.equals(confirmPassword)) {
            return false;
        }
        
        // 用户名格式验证（字母数字下划线，4-20位）
        if (!username.matches("^[a-zA-Z0-9_]{4,20}$")) {
            return false;
        }
        
        // 密码强度验证（至少6位）
        if (password.length() < 6) {
            return false;
        }
        
        // 手机号格式验证
        if (!phone.matches("^1[3-9]\\d{9}$")) {
            return false;
        }
        
        // 邮箱格式验证（如果提供）
        if (email != null && !email.trim().isEmpty()) {
            if (!email.matches("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$")) {
                return false;
            }
        }
        
        // 身份证号格式验证（如果提供）
        if (idCard != null && !idCard.trim().isEmpty()) {
            if (!idCard.matches("^\\d{17}[\\dXx]$")) {
                return false;
            }
        }
        
        return true;
    }
    
    /**
     * 获取验证错误信息
     */
    public String getValidationError() {
        if (username == null || username.trim().isEmpty()) {
            return "用户名不能为空";
        }
        if (password == null || password.trim().isEmpty()) {
            return "密码不能为空";
        }
        if (confirmPassword == null || confirmPassword.trim().isEmpty()) {
            return "确认密码不能为空";
        }
        if (realName == null || realName.trim().isEmpty()) {
            return "真实姓名不能为空";
        }
        if (phone == null || phone.trim().isEmpty()) {
            return "手机号不能为空";
        }
        
        if (!password.equals(confirmPassword)) {
            return "两次输入的密码不一致";
        }
        
        if (!username.matches("^[a-zA-Z0-9_]{4,20}$")) {
            return "用户名格式不正确，只能包含字母、数字、下划线，长度4-20位";
        }
        
        if (password.length() < 6) {
            return "密码长度不能少于6位";
        }
        
        if (!phone.matches("^1[3-9]\\d{9}$")) {
            return "手机号格式不正确";
        }
        
        if (email != null && !email.trim().isEmpty()) {
            if (!email.matches("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$")) {
                return "邮箱格式不正确";
            }
        }
        
        if (idCard != null && !idCard.trim().isEmpty()) {
            if (!idCard.matches("^\\d{17}[\\dXx]$")) {
                return "身份证号格式不正确";
            }
        }
        
        return null;
    }
} 